package com.yaorange.nongjt.service.impl;

import java.util.ArrayList;
import java.util.List;
import com.yaorange.common.utils.DateUtils;
import org.apache.commons.collections4.CollectionUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.yaorange.nongjt.mapper.NjtAreaMapper;
import com.yaorange.nongjt.domain.NjtArea;
import com.yaorange.nongjt.service.INjtAreaService;
import org.springframework.transaction.annotation.Transactional;

/**
 * 地区层级关系Service业务层处理
 *
 * @author junjiang
 * @date 2025-02-27
 */
@Service
public class NjtAreaServiceImpl implements INjtAreaService
{
    @Autowired
    private NjtAreaMapper njtAreaMapper;

    /**
     * 查询地区层级关系
     *
     * @param id 地区层级关系主键
     * @return 地区层级关系
     */
    @Override
    public NjtArea selectNjtAreaById(String id)
    {
        return njtAreaMapper.selectNjtAreaById(id);
    }

    /**
     * 查询地区层级关系列表
     *
     * @param njtArea 地区层级关系
     * @return 地区层级关系
     */
    @Override
    public List<NjtArea> selectNjtAreaList(NjtArea njtArea)
    {
        return njtAreaMapper.selectNjtAreaList(njtArea);
    }

    /**
     * 新增地区层级关系
     *
     * @param njtArea 地区层级关系
     * @return 结果
     */
    @Override
    public int insertNjtArea(NjtArea njtArea)
    {
        njtArea.setCreateTime(DateUtils.getNowDate());
        return njtAreaMapper.insertNjtArea(njtArea);
    }

    /**
     * 根据⽗节点code获取⼦节点，为null时返回所有根节点
     *
     * @param parentCode
     * @return
     */
    @Override
    public List<NjtArea> getByParentCode(String parentCode) {
        return njtAreaMapper.selectByParentCode(parentCode);
    }

    /**
     * 修改地区层级关系
     *
     * @param njtArea 地区层级关系
     * @return 结果
     */
    @Override
    public int updateNjtArea(NjtArea njtArea)
    {
        njtArea.setUpdateTime(DateUtils.getNowDate());
        return njtAreaMapper.updateNjtArea(njtArea);
    }

    /**
     * 批量删除地区层级关系
     *
     * @param ids 需要删除的地区层级关系主键
     * @return 结果
     */
    @Override
    public int deleteNjtAreaByIds(String[] ids)
    {
        return njtAreaMapper.deleteNjtAreaByIds(ids);
    }

    /**
     * 删除地区层级关系信息
     *
     * @param id 地区层级关系主键
     * @return 结果
     */
    @Override
    public int deleteNjtAreaById(String id)
    {
        return njtAreaMapper.deleteNjtAreaById(id);
    }



    /**
     * @return {@link List }<{@link NjtArea }>
     * @descripiton 查询省列表
     */
    @Override
    @Transactional(readOnly = true)
    public List<NjtArea> selectNjtAreaRootList() {
        return njtAreaMapper.selectNjtAreaRootList();
    }

    /**
     * @param parentCode 父代码
     * @return {@link List }<{@link NjtArea }>
     * @descripiton 根据父级编码查询子级列表
     */
    @Override
    @Transactional(readOnly = true)
    public List<NjtArea> selectNjtAreaListByParentCode(String parentCode) {
        return njtAreaMapper.selectNjtAreaListByParentCode(parentCode);
    }

    /**
     * @return {@link List }<{@link List }<{@link NjtArea }>>
     * @descripiton 查询默认的根列表
     */
    @Override
    @Transactional(readOnly = true)
    public List<List<NjtArea>> queryDefaultRootList() {
        List<List<NjtArea>> result = new ArrayList<>(3);
        // 查询默认的省列表
        List<NjtArea> tempList = selectNjtAreaRootList();
        /*if (provinceList == null || provinceList.size() == 0) {
            return result;
        }*/
        if (CollectionUtils.isEmpty(tempList)) {
            return result;
        }
        result.add(tempList);

        // 查询默认省的市列表，查询默认市的区列表（循环优化）
        for (int i = 0; i < 2; i++) {
            NjtArea njtArea = tempList.get(0);
            tempList = selectNjtAreaListByParentCode(njtArea.getCode());
            if (CollectionUtils.isEmpty(tempList)) {
                return result;
            }
            result.add(tempList);
        }
        return result;
    }

}
